package server.container;

public class AlarmierteSchleife implements Comparable<AlarmierteSchleife> {

	private String feuerwehrType = "";
	private String alarmArt = "";
	private String alarmKennung = "";
	private String ricText = "";
	private long timestamp = 0;
	private String einsatzart = "";

	public AlarmierteSchleife(String feuerwehrType, String alarmKennung, String einsatzart,
			String ricText, long timestamp, String alarmArt) {

		this.feuerwehrType = feuerwehrType;
		this.alarmKennung = alarmKennung;
		this.einsatzart = einsatzart;
		this.ricText = ricText;
		this.timestamp = timestamp;
		this.alarmArt = alarmArt;
	}

	@Override
	public int compareTo(AlarmierteSchleife o) {
		if (getAlarmTypeID() == o.getAlarmTypeID()) {
			
			
			if(alarmKennung.equals(o.getAlarmKennung())) {
				if(timestamp == o.getTimestamp()) {
					return 0;
				}
				if(timestamp < o.getTimestamp()) {
					return -1;
				}
				return 1;
			}
			else {
				return alarmKennung.compareTo(o.getAlarmKennung());
			}
		}
		if (getAlarmTypeID() > o.getAlarmTypeID()) {
			return -1;
		}
		return 1;
	}

	private int getAlarmTypeID() {

		if (alarmArt.equals("fms")) {
			return 4;
		}
		if (alarmArt.equals("pocsag")) {
			return 3;
		}
		if (alarmArt.equals("5ton")) {
			return 2;
		}

		return 1;

	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((alarmKennung == null) ? 0 : alarmKennung.hashCode());
		result = prime * result + ((feuerwehrType == null) ? 0 : feuerwehrType.hashCode());
		result = prime * result + ((einsatzart == null) ? 0 : einsatzart.hashCode());
		result = prime * result + ((ricText == null) ? 0 : ricText.hashCode());
		result = (int) (prime * result + timestamp);
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		AlarmierteSchleife other = (AlarmierteSchleife) obj;
		if (alarmKennung == null) {
			if (other.alarmKennung != null)
				return false;
		} else if (!alarmKennung.equals(other.alarmKennung))
			return false;
		if (feuerwehrType == null) {
			if (other.feuerwehrType != null)
				return false;
		} else if (!feuerwehrType.equals(other.feuerwehrType))
			return false;
		if (einsatzart == null) {
			if (other.einsatzart != null)
				return false;
		} else if (!einsatzart.equals(other.einsatzart))
			return false;
		if (ricText == null) {
			if (other.ricText != null)
				return false;
		} else if (!ricText.equals(other.ricText))
			return false;
		
		return true;
	}

	public String getFeuerwehrType() {
		return feuerwehrType;
	}

	public String getAlarmKennung() {
		return alarmKennung;
	}

	public String getRicText() {
		return ricText;
	}

	public long getTimestamp() {
		return timestamp;
	}

	public String getEinsatzart() {
		return einsatzart;
	}

}
